Computer programs are traditionally developed by the writing of source code for components of the program that include a main module and various other modules functions, or subroutines that are invoked by the main module. The source code of components of computer programs are typically developed specifically for the domain of one computer program. As a result, one computer program might not be able to use components developed specifically for another computer program. Although some utility components (e.g., sort routines) can be reused by different computer programs, they are typically very low-level components that are not related to the domain of the computer program. Because of the inability to reuse high-level components for multiple computer programs, the cost of developing a computer program can be quite high. In addition, because new components are developed for each new computer program, the reliability of the new computer programs is unproved.
Many techniques have been developed to facilitate the reusability and reliability of software components. One well-known technique is object-oriented programming. Object-oriented programming allows a programmer to define a type of component, known as an “object.” Each type of object has a defined interface with a defined behavior. A programmer can develop a computer program to use the interfaces of objects that have been developed by other programmers to provide that behavior within the computer program. The behavior of an object is provided by methods (or member functions), and the data of an object is provided as attributes (or data members). Some object-oriented programming languages allow attributes to be set and retrieved directly (e.g., “object.attribute1=15”), while other object-oriented programming languages only allow attributes to be set and retrieved indirectly through methods (e.g., “object.setAttribute1(15)”). The methods for setting attributes are referred to as “set methods” and for retrieving attributes are referred to as “get methods.”
Although object-oriented programming techniques have helped increase the reusability and reliability of software components, it is still very expensive to develop a computer program even using these reusable components. Part of the expense is attributable to the need of computer programmers to know and understand all the interfaces of the components in order to integrate the components into the desired computer program. It would be desirable to have a programming technique that would increase reusability and reliability of the software components while reducing the overall expense of developing computer programs. Moreover, it would be desirable to have development time tools that would assist a programmer when developing with this new programming technique.